from sqlalchemy import create_engine
from sqlalchemy.ext.automap import automap_base
from sqlalchemy.orm import sessionmaker
from  mysql_.Secret_pswd import *
from mysql_.conf_mysql import *

engine = create_engine(mysql_connection, encoding ='utf8')  # 建立数据库MYSQL连接
Base = automap_base()
Base.prepare(engine, reflect=True)
session = sessionmaker(bind=engine) # 订制session会话
User = Base.classes.user  # 映射数据库的表


def db_insert_into(username, password, nickname, secret_problem, secret_answer):  # 插入新的数据，且用户名是不可以重复的。data是一个数据包，包含帐号，密码，昵称，密保等,传入一个字典形式的数据。
    sess = session()
    print('正在注册传入数据库数据：'+'帐号：'+username+'密码：'+password+'昵称：'+nickname+'密报问题：'+secret_problem+'密保答案：'+secret_answer)
    sel = sess.query(User).filter_by(username=username).first()
#    print(sel)
    if sel is None:
        en_aes = encrypt_oracle(password)
        user_1 = User(username=username, password=en_aes, nickname=nickname,
                      secret_problem=secret_problem, secret_answer=secret_answer)
        sess.add(user_1)
        sess.commit()   # 注册成功，返回一个True信号。
        print('传入数据成功！')
        return True
    else:  # 如果存在就返回错误。
        print('传入数据错误，用户已注册！')
        return False


def db_query(username):  # 数据库查询的包括信息，用户名，密码，昵称，密保信息。  在修改密码时，逻辑部分可以先对旧密码判定，如果符合再定位到modify函数修改新密码
    global data1
    data1 = False
    sess = session()
    print('正在查询%s的相关信息.'%username)
    user_1 = sess.query(User).filter_by(username=username).all()
    if user_1 is None:
        return data1
    else:
        for username1, password1, nickname1, secret_problem1, secret_answer1 \
                in sess.query(User.username, User.password, User.nickname,
                              User.secret_problem, User.secret_answer).filter_by(username=username):
            de_aes = decrypt_oralce(password1)   # 将密码解密取出。
            # print(username1,password1,nickname1,secret_problem1,secret_answer1)
            data1 = {'username': username1, 'password': de_aes,
                     'nickname': nickname1, 'secret_problem': secret_problem1, 'secret_answer': secret_answer1}
        print(data1)
        return data1


def db_update(username,password=None, nickname=None, secret_problem=None, secret_answer=None,):   # 更新个人信息，1.修改部分 2。修改全部。
    sess = session()
    user_1 = sess.query(User).filter_by(username=username).first()
    print('正在更新%s的个人信息。'%username)
    if user_1 is None:
        return False
    else:
        if password:   # 修改密码
            en_aes = encrypt_oracle(password)
            user_1.password = en_aes
        if nickname:  # 修改昵称
            user_1.nickname = nickname
        if secret_problem:  # 修改密保问题
            user_1.secret_problem = secret_problem
        if secret_answer:  # 修改密保答案
            user_1.secret_answer = secret_answer

    sess.commit()
    return True  # 修改成功返回True信号


def db_modify(username, password):  # 找回密码的修改密码。
    sess = session()
    user_1 = sess.query(User).filter_by(username=username).first()
    print('正在修改密码...')
    en_aes=encrypt_oracle(password)  # 进行数据加密储存。
    user_1.password = en_aes
    sess.commit()
    print('密码修改成功！')
    return True  # 修改成功返回一个True信号


#if __name__ == '__main__':
#     username='a','password'='1','nickname':'fafa','secret_problem':'asas','secret_answer':'asdsaddas'}
#     db_insert_into('a','123','asasd','daddd','gggg')
#     db_query('2')
